package _type

import (
	"database/sql/driver"
	"errors"
	"fmt"
	"strconv"
)

type StrFloat64 string

// Scan 将数据库中取出的数据，赋值给目标类型
func (s *StrFloat64) Scan(src interface{}) error {

	switch v := src.(type) {
		case float64:
			//不用科学计数
			sv := strconv.FormatFloat(v,'f',-1,64)
			*s = StrFloat64(sv)
		default:
			return errors.New(fmt.Sprintf("gorm转换float64失败: %v", v))
	}

	return nil
}

// Value 写入数据库之前，对数据做类型转换
func (s StrFloat64) Value() (driver.Value, error) {
	if len(s) == 0 {
		return nil, nil
		//return nil, errors.New(fmt.Sprintf("gorm float64转换失败"))
	}
	return s.toFloat64()
}

// IsEmpty 是否为空
func (s StrFloat64) IsEmpty() bool {
	sv := string(s)
	return len(sv) == 0 || sv == "0"
}

// toFloat64
func (s StrFloat64) toFloat64() (float64, error) {
	return strconv.ParseFloat(string(s), 64)
}